package pe.edu.upc.dsd.qwerty.wsreserva.service.impl;

import java.util.Collection;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

import pe.edu.upc.dsd.qwerty.wsreserva.dao.PasajeroDAO;
import pe.edu.upc.dsd.qwerty.wsreserva.dao.VuelosDAO;
import pe.edu.upc.dsd.qwerty.wsreserva.model.Asiento;
import pe.edu.upc.dsd.qwerty.wsreserva.model.Pasajero;
import pe.edu.upc.dsd.qwerty.wsreserva.model.Vuelo;
import pe.edu.upc.dsd.qwerty.wsreserva.util.bean.BeanRespuesta;
import pe.edu.upc.dsd.qwerty.wsreserva.util.bean.MailService;

@Path("/vuelos")
//@Produces("text/plain,application/json,text/xml")
//@Consumes("text/plain,application/json,text/xml")
@Produces("application/json")
@Consumes("text/plain,application/json")
public class VueloRestServiceImpl{

	//para cache 
	//goglear jaxrs cache
	//http://tescherm.com/blog/2010/07/18/http-caching-with-jersey-jax-rs/
		
	private static final Logger logger = Logger.getLogger(VueloRestServiceImpl.class); 
	
	@Autowired
	private VuelosDAO vuelosDAO;
	
	@Autowired
	private MailService mailService;

	@Autowired
	private PasajeroDAO pasajeroDAO;
	
	@GET
	//@Path("/lista") es el metodo 
	public Collection<Vuelo> obtenerListaVuelos() {
		return vuelosDAO.listarVuelos();
	}

	@GET
	@Path("/{idvuelo}")
	public Vuelo obtenerVuelo(@PathParam("idvuelo")String idVuelo) {
		return vuelosDAO.obtenerVuelo(idVuelo);
	}

	@GET
	@Path("/{idvuelo}/asientos")
	public Collection<Asiento> obtenerAsientos(@PathParam("idvuelo")String idVuelo) {
		return vuelosDAO.obtenerAsientos(idVuelo);
	}
	
	@GET
	@Path("/{idvuelo}/asientos/{idAsiento}")
	public Asiento obtenerAsiento(@PathParam("idAsiento")Integer idAsiento) {
		return vuelosDAO.obtenerAsiento(idAsiento);
	}
	
	@GET
	@Path("/{idvuelo}/asientos/{idAsiento}/confirm/{uuid}")
	public BeanRespuesta confirmaReserva(@PathParam("uuid")String uuid) {
		logger.debug("entro a confirmar");
		BeanRespuesta res = new BeanRespuesta(0,"Se ha confirmado la reserva");
		try {
			Asiento asiento = vuelosDAO.obtenerAsiento( uuid );
			if(asiento!=null){
				vuelosDAO.confirmarReserva(uuid , VueloServiceImpl.ASIENTO_RESERVADO );
				mailService.enviaMensajeConfirmado( asiento.getPasajero().getCorreo() , asiento, vuelosDAO.obtenerVuelo(asiento.getIdVuelo().toString() ));
			}else{
				res.setError(1, "No se ha encontrado el asiento, reserva no confirmada");
			}	
		} catch (Exception e) {
			e.printStackTrace();
			res.setError(2, "Error : " + e.getMessage() );
		}
		return res;
	}
}
